﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Faculty
{
    class Group
    {
        string name;
        string curator;
        List<Student> students;
        static int groupNumber = 1;

        public Group(string name, string curator)
        {
            this.name = name;
            this.curator = curator;
            students = new List<Student>();
            groupNumber++;
        }

        public void Add(Student student)
        {
            students.Add(student);
            /*
            if (student.GetSex() == Sex.Female)
                Console.WriteLine("Студентка {0} успешно добавлена в группу \"{1}\"", student, name);
            else
                Console.WriteLine("Студент {0} успешно добавлен в группу \"{1}\"", student, name);
                */
        }

            //выведет название группы, куратора и всех студентов.
        public void ShowInfo()
        {
            Console.WriteLine(this);
            foreach(var student in students)
            {
                student.ShowInfo();
            }
            Console.WriteLine("-----------------------------------");
            Console.WriteLine();
        }

        //выведет всех студентов со средней оценкой успеваимости выше, чем criteium
        //студент не будет выведен на экран при наличии долгов (оценок 0-2) 
        //даже при высоком общем проценте успеваимости
        public void ShowStudentBetterThanCriteium(double criterium)
        {
            bool isExistSuchStudent = false;
            Console.WriteLine(this);
            Console.WriteLine("Список студентов без долгов со средним баллом выше {0}:", criterium);
            foreach (var student in students)
            {
                if (student.HasDebt() == false && student.GetAverageMark() > criterium)
                { 
                    student.ShowInfoWithMarks();
                    isExistSuchStudent = true;
                }
            }
            if (!isExistSuchStudent)
            {
                Console.WriteLine("Нет студентов, удовлетворяющим критерию.");
            }
            Console.WriteLine("-----------------------------------");
            Console.WriteLine();
        }

        //выведет всех студентов со средней оценкой успеваимости ниже, чем criterium
        public void ShowStudentWorseThanCriteium(double criterium)
        {
            bool isExistSuchStudent = false;
            Console.WriteLine(this);
            Console.WriteLine("Список студентов со средним баллом ниже {0}:", criterium);
            foreach (var student in students)
            {
                if (student.GetAverageMark() < criterium)
                {
                    student.ShowInfoWithMarks();
                    isExistSuchStudent = true;
                }
            }
            if (!isExistSuchStudent)
            {
                Console.WriteLine("Нет студентов, удовлетворяющим критерию.");
            }
            Console.WriteLine("-----------------------------------");
            Console.WriteLine();
        }

        //выведет всех студентов с "долгами" (отметками 2 балла и менее)
        public void ShowStudentWithDebts()
        {
            bool isExistSuchStudent = false;
            Console.WriteLine(this);
            Console.WriteLine("Список студентов с долгами:");
            foreach (var student in students)
            {
                if (student.HasDebt())
                {
                    student.ShowInfoWithMarks();
                    isExistSuchStudent = true;
                }
            }
            if (!isExistSuchStudent)
            {
                Console.WriteLine("Нет студентов, удовлетворяющим критерию.");
            }
            Console.WriteLine("-----------------------------------");
            Console.WriteLine();
        }

        public string GetGroupName()
        {
            return name;
        }

        public static int GetGroupNumber()
        {
            return groupNumber;
        }
        public override string ToString()
        {
            return String.Format("Группа \"{0}\". Куратор {1}", name, curator);
        }
    }
}
